﻿Public Class altaOrdenDeServicio

    Private Sub frmAltaOrdenDeServicioLocal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Carga_TipoOS()
        LimpiaCliente()
        LimpiaOS()
    End Sub

    Private Sub btnConsultar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        'indico que uso este frm solo para consulta
    End Sub
    Private Sub LimpiaCliente()
        txtCodClie.Text = ""
        txtDni.Text = ""
        txtNomClie.Text = ""
        txtApeClie.Text = ""
        txtTipoClie.Text = ""

        txtCodClie.Enabled = True
        txtDni.Enabled = True
        txtNomClie.Enabled = True
        txtApeClie.Enabled = True
        txtTipoClie.Enabled = True

    End Sub

    Private Sub btnBuscaCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscaCliente.Click
        LimpiaCliente()
    End Sub

    Private Sub btnLimpia_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpia.Click
        Dim Cliente As New clsCliente()
        Dim ClienteDao As New daoCliente()
        If txtCodClie.Text.Trim.Length > 0 Then 'Si ingreso un codigo de cliente busco por ese codigo
            Cliente = ClienteDao.TraeCliente(Convert.ToInt32(txtCodClie.Text.Trim))
            If Cliente.Cli_Id > 0 Then
                AsignaCampos(Cliente)
            Else
                MessageBox.Show("No se encontró ningun cliente con codigo: " & txtCodClie.Text.Trim, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Else ''SI no hay codigo de articulo busco por DNI,  Nombre, Apellido o 
            If txtDni.Text.Trim.Length > 0 Then
                Cliente = ClienteDao.TraeClienteDNI(txtDni.Text.Trim.ToUpper)
                If Cliente.Cli_Id > 0 Then
                    AsignaCampos(Cliente)
                Else
                    MessageBox.Show("No se encontró ningun cliente con DNI: " & txtDni.Text.Trim.ToUpper, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End If
            Else
                Dim ListaClientes As New List(Of clsCliente)
                If txtApeClie.Text.Trim.Length > 0 Then ''Si puso apellido busco por apellido
                    ListaClientes = ClienteDao.TraeClientesApellido(txtApeClie.Text.Trim.ToUpper)
                Else
                    If txtNomClie.Text.Trim.Length > 0 Then ''Si puso nombre busco por nombre
                        ListaClientes = ClienteDao.TraeClientesNombre(txtNomClie.Text.Trim.ToUpper)
                    Else ''Si puso nada traigo todos los clientes
                        ListaClientes = ClienteDao.TraeClientes()
                    End If
                End If
                If ListaClientes.Count > 1 Then ''Encontro mas de un articulo
                    TraeConsulta(ListaClientes)
                ElseIf ListaClientes.Count = 1 Then '' Encontro un solo articulo
                    Cliente = ListaClientes.Item(0)
                    AsignaCampos(Cliente)
                Else ''No encontro ningun articulo
                    MessageBox.Show("No se encontró ningun Cliente ", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End If

            End If

        End If
        Cliente.Dispose()
        ClienteDao.Dispose()
    End Sub
    Private Sub AsignaCampos(ByVal Cliente As clsCliente)
        txtCodClie.Text = Cliente.Cli_Id.ToString.Trim
        txtDni.Text = Cliente.Dni.Trim.ToUpper
        txtNomClie.Text = Cliente.Nombre.Trim.ToUpper
        txtApeClie.Text = Cliente.Apellido.Trim.ToUpper
        If Cliente.Tipo = "P" Then
            txtTipoClie.Text = "PARTICULAR"
        Else
            txtTipoClie.Text = "EMPRESA"
        End If

        txtCodClie.Enabled = False
        txtDni.Enabled = False
        txtNomClie.Enabled = False
        txtApeClie.Enabled = False
        txtTipoClie.Enabled = False
    End Sub
    Private Sub TraeConsulta(ByVal ListaClientes As List(Of clsCliente))
        consultaCliente.ModoAcceso = "ALTA OS"
        consultaCliente.grdClientes.DataSource = ListaClientes

        consultaCliente.grdClientes.Columns(0).DataPropertyName = "Cli_Id"
        consultaCliente.grdClientes.Columns(1).DataPropertyName = "Apellido"
        consultaCliente.grdClientes.Columns(2).DataPropertyName = "Nombre"
        consultaCliente.grdClientes.Columns(3).DataPropertyName = "Dni"
        consultaCliente.grdClientes.Columns(4).DataPropertyName = "Email"
        consultaCliente.grdClientes.Columns(5).DataPropertyName = "Cuit"
        consultaCliente.grdClientes.Columns(6).DataPropertyName = "Direccion"
        consultaCliente.grdClientes.Columns(7).DataPropertyName = "Altura"
        consultaCliente.grdClientes.Columns(8).DataPropertyName = "Depto"
        consultaCliente.grdClientes.Columns(9).DataPropertyName = "Tel"

        consultaCliente.grdClientes.Columns(10).DataPropertyName = "Tipo"
        consultaCliente.grdClientes.Columns(11).DataPropertyName = "Cod_suc"

        consultaCliente.grdClientes.Columns(0).HeaderText = "Codigo"
        consultaCliente.grdClientes.Columns(1).HeaderText = "Apellido"
        consultaCliente.grdClientes.Columns(2).HeaderText = "Nombre"
        consultaCliente.grdClientes.Columns(3).HeaderText = "DNI"
        consultaCliente.grdClientes.Columns(4).HeaderText = "Email"
        consultaCliente.grdClientes.Columns(5).HeaderText = "CUIT/CUIL"
        consultaCliente.grdClientes.Columns(6).HeaderText = "Direccion"
        consultaCliente.grdClientes.Columns(7).HeaderText = "Nro."
        consultaCliente.grdClientes.Columns(8).HeaderText = "Depto."
        consultaCliente.grdClientes.Columns(9).HeaderText = "Telefono"

        consultaCliente.grdClientes.Columns(10).HeaderText = "Tipo"
        consultaCliente.grdClientes.Columns(11).HeaderText = "Codigo Sucursal"

        consultaCliente.grdClientes.Columns(10).Visible = False
        consultaCliente.grdClientes.Columns(11).Visible = False

        consultaCliente.MdiParent = Me.MdiParent
        Me.Enabled = False
        consultaCliente.Show()
    End Sub
    Private Sub LimpiaOS()
        txtDetalle.Text = ""
        cmbTipoOs.SelectedIndex = 0
    End Sub
    Private Sub Carga_TipoOS()
        Dim ListaTipoOs As New List(Of clsTipo_Os)
        Dim TipoOsDao As New daoTipo_Os()
        ListaTipoOs = TipoOsDao.TraeTiposOrdenServicio()
        TipoOsDao.Dispose()

        cmbTipoOs.DataSource = ListaTipoOs
        cmbTipoOs.DisplayMember = "Descri"
        cmbTipoOs.ValueMember = "Tipo_Os"
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        If (txtDetalle.Text.Trim.Length > 0 Or txtCodClie.Text.Trim.Length > 0) Then
            Dim Respuesta As DialogResult
            Respuesta = MessageBox.Show("¿Desea salir sin guardar?", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)
            If Respuesta = Windows.Forms.DialogResult.Yes Then
                Me.Close()
            End If
        Else
            Me.Close()
        End If
    End Sub

    Private Sub btnAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAceptar.Click
        Dim Cliente As New clsCliente()
        Dim ClienteDao As New daoCliente()
        Dim OS As New clsOrden_Servicio()
        Dim Tipo_Os As New clsTipo_Os()
        Dim Tipo_OsDao As New daoTipo_Os()
        Dim Estado_Os As New clsEstado_Os()
        Dim Estado_OsDao As New daoEstado_Os()
        Dim OsBusiness As New businessOS()
        Dim OS_Det As New clsOrden_Servicio_Detalle

        Try
            ''Valido que cargo un cliente.
            If txtCodClie.Text.Trim.Length = 0 Then
                MessageBox.Show("Debe seleccionar un Cliente para porde guardar la Orden de Servicio", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            End If
            Cliente = ClienteDao.TraeCliente(Convert.ToInt32(txtCodClie.Text.Trim))
            If Cliente.Cli_Id = 0 Then
                MessageBox.Show("Debe seleccionar un Cliente Valido para porde guardar la Orden de Servicio", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            End If

            ''Traigo el Tipo de OS
            Tipo_Os = Tipo_OsDao.TraeTipoOrdenServicio(Convert.ToInt32(cmbTipoOs.SelectedValue))

            ''Obtengo el estado de la OS
            Estado_Os = Estado_OsDao.TraeEstadoOrdenServicio(1)

            ''Armo la Orden de Servicio
            OS.Tipo_Os = Tipo_Os.Tipo_Os
            OS.Tipo = Tipo_Os
            OS.Os_Fecha_Inicio = Now.Date()
            OS.Os_Fecha_Fin = Convert.ToDateTime("01/01/1999")
            OS.Tec_Id = 0
            OS.Cli_Id = Cliente.Cli_Id
            OS.Cliente = Cliente
            OS.Os_Estado = Estado_Os.EstadoOs_Id
            OS.Estado = Estado_Os
            OS.Cod_Suc = Configuracion.Cod_Suc

            ''Detalle
            OS_Det.Descri = txtDetalle.Text.Trim.ToUpper
            OS_Det.Osdte_Estado = Estado_Os.EstadoOs_Id
            OS_Det.Estado = Estado_Os
            OS_Det.Cod_Suc = Configuracion.Cod_Suc

            OS.Os_Id = Numerador.TraeProximo("ORDEN_SERVICIO")
            OS_Det.Osdte_Id = Numerador.TraeProximo("ORDEN_SERVICIO_DETALLE")
            OS_Det.Os_Id = OS.Os_Id

            Dim ListaOsdet As New List(Of clsOrden_Servicio_Detalle)
            ListaOsdet.Add(OS_Det)

            OS.Detalle = ListaOsdet


            ''Le doy alta
            If OsBusiness.AltaOrdeServicio(OS) Then
                MessageBox.Show("La orden de servicio se generó correctamente con el codigo: " & OS.Os_Id.ToString.Trim, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                LimpiaCliente()
                LimpiaOS()
                txtCodClie.Focus()
            Else
                MessageBox.Show("Nos se pudo guardar la Orden de Servicio. Comuniquese con Sistemas", "Error.", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Finally
            Cliente.Dispose()
            ClienteDao.Dispose()
            OS.Dispose()
            Tipo_OsDao.Dispose()
            Tipo_Os.Dispose()
            Estado_Os.Dispose()
            Estado_OsDao.Dispose()
        End Try
    End Sub

    Private Sub txtCodClie_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtCodClie.KeyPress
        validarInt(e)
    End Sub

    Private Sub txtDni_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtDni.KeyPress
        validarInt(e)
    End Sub

    Private Sub txtNomClie_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtNomClie.KeyPress
        validarString(e)
    End Sub

    Private Sub txtApeClie_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtApeClie.KeyPress
        validarString(e)
    End Sub

End Class